<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Slowly fly to a location</title>
    <meta
      name="viewport"
      content="initial-scale=1,maximum-scale=1,user-scalable=no"
    />
    <script src="../../lib/mapbox-gl.js"></script>
    <link href="../../lib/mapbox-gl.css" rel="stylesheet" />
    <script src="../../lib/axios.min.js"></script>
    <style>
      body {
        margin: 0;
        padding: 0;
      }
      #map {
        position: absolute;
        top: 0;
        bottom: 0;
        width: 100%;
      }
      #fly {
        display: block;
        position: relative;
        margin: 0px auto;
        width: 50%;
        height: 40px;
        padding: 10px;
        border: none;
        border-radius: 3px;
        font-size: 12px;
        text-align: center;
        color: #fff;
        background: #ee8a65;
      }
    </style>
  </head>
  <body>
    <div id="map"></div>
    <br />
    <button id="fly">Fly</button>
    <script>
      let baseDataUrl = `http://${localStorage.getItem(
        "host"
      )}/mapbox-gl-js-offline-examples`;
      axios
        .get(
          baseDataUrl +
            `/resources/styles/${localStorage.getItem(
              "mbtilesStylesName"
            )}.json`
        )
        .then((res) => {
          let data = res.data;
          initMap(data);
        })
        .catch((err) => {
          console.error(err);
        });

      function initMap(style) {
        let map = new mapboxgl.Map({
          container: "map",
          center: [116.392, 39.913],
          zoom: 9,
          bearing: -2.5,
          style: style,
        });

        var isAtStart = true;
        var start = [116.392, 39.913];
        var end = [116.392, 39.913];
        document.getElementById("fly").addEventListener("click", function () {
          // depending on whether we're currently at point a or b, aim for
          // point a or b
          var target = isAtStart ? end : start;

          // and now we're at the opposite point
          isAtStart = !isAtStart;

          map.flyTo({
            // These options control the ending camera position: centered at
            // the target, at zoom level 9, and north up.
            center: target,
            zoom: 14,
            bearing: 0,

            // These options control the flight curve, making it move
            // slowly and zoom out almost completely before starting
            // to pan.
            speed: 0.2, // make the flying slow
            curve: 1, // change the speed at which it zooms out

            // This can be any easing function: it takes a number between
            // 0 and 1 and returns another number between 0 and 1.
            easing: function (t) {
              return t;
            },

            // this animation is considered essential with respect to prefers-reduced-motion
            essential: true,
          });
        });
      }
    </script>
  </body>
</html>
